package com.javasm.util;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.mail.MailProperties;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

import javax.mail.*;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.net.URL;
import java.util.Properties;
@Component
@Slf4j
public class EmailUtil {//发送邮件工具类

//    发送协议：SMTP
//    接收协议：POP3

    //方式1： 原生的javaMail邮件发送  （不再使用,附件方式比较繁琐）
    public void sendEmail() throws MessagingException {
        String from  ="1349477038@qq.com";//发送人邮箱
        String auth="iacpgrxawiqcfhah"; //发送人邮箱的授权码

        Properties properties = new Properties();
        properties.put("mail.transport.protocol", "smtp");// 连接协议
        properties.put("mail.smtp.host", "smtp.qq.com");// 主机名 smtp.163.com
        properties.put("mail.smtp.port", 465);// 默认端口号 25（不加密传输）
        properties.put("mail.smtp.auth", "true");//服务端认证。
        properties.put("mail.smtp.ssl.enable", true);// 设置是否使用ssl安全连接 ---一般都使用
        properties.put("mail.debug", "true");// 设置是否显示debug信息 true 会在控制台显示相关信息

        //与stmp.qq.com的会话对象
        Session s = Session.getDefaultInstance(properties);//与邮件服务器的会话对象

        Message msg = new MimeMessage(s); //主体，接收人，内容，附件。。。
         msg.setFrom(new InternetAddress(from));//发送人
            msg.setSubject("暴雨通知");//标题
            Address[] addresses = new Address[]{//接收人邮箱
                    new InternetAddress("tomato_02@163.com")
            };
            msg.setRecipients(Message.RecipientType.TO,addresses);//接收人()
            msg.setRecipients(Message.RecipientType.CC,new InternetAddress[]{//抄送人
                    new InternetAddress("1349477038@163.com")
            });

            msg.setText("昨夜暴雨..");//内容
           //邮差对象
            Transport transport = s.getTransport();
            transport.connect(from,auth);//登录发送人邮箱账号
            transport.sendMessage(msg,msg.getAllRecipients());
    }


    //方法2：spring封装的javaMail邮件发送  spring-mail组件
    public static void sendJavaMail() throws MessagingException { //发送html文本邮件,带图片,带附件
        //注入javaMailSender
        JavaMailSender mailSender = BeanUtil.getBean(JavaMailSender.class);
        //注入email内置配置对象
        MailProperties mailProperties = BeanUtil.getBean(MailProperties.class);
        //注入模板引擎
        TemplateEngine engine=BeanUtil.getBean(TemplateEngine.class);

        //创建空消息对象
        MimeMessage msg = mailSender.createMimeMessage();
        //MimeMessageHelper辅助器 封装对象  传递空消息  multipart : true 表示带文件发送
        MimeMessageHelper h  = new MimeMessageHelper(msg,true);
        //发送人
        h.setFrom(mailProperties.getUsername());
        //发送邮箱
        h.addTo("1349477038@qq.com");
        //发送主题
        h.setSubject("项目计划1.0");

        String content1="<span style='color:yellow'>4个月内完成!....<span>" +
                "<img style='width: 100px;height:100px' src='cid:mailImg'/>";// cid:mailImg 为图片的id
        //使用模板引擎发送邮件文本内容
        Context context = new Context();
        context.setVariable("email","123456789@163.com");
        String content2 = engine.process("userLogin", context); //使用模板userLogin.html发送邮件文本内容
         String content = content2+content1;
        //发送内容
        h.setText(content,true);//content-type:text/plain | text/html  默认是false 纯文本传输， true表示支持html
        h.addInline("mailImg",new File("D:\\dev\\ftmarket\\src\\main\\resources\\templates\\upload\\ddr.png"));// addInline() 添加图片
        File f = new File("D:\\dev\\ftmarket\\src\\main\\resources\\templates\\upload\\tmp\\readme.txt");
        //发送附件  f.getName()附件名
        h.addAttachment(f.getName(),f);// addAttachment() 添加附件
        mailSender.send(msg);
    }

}
